package com.xcm.service;

import com.alibaba.fastjson.JSONObject;
import com.xcm.model.TbDeviceUpgrade;
import com.xcm.model.vo.DeviceInfoListVO;
import com.xcm.model.vo.FirmWareListVO;
import com.xcm.page.PageInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;

/**
 * @Description 固件管理
 * @Author HanQinrui
 * @Date 2018/5/7 9:58
 * @Version 1.0
 */
public interface FirmWareService {
	/**
	 * 获取固件分页列表
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	PageInfo<FirmWareListVO> listByPage(Integer pageNum, Integer pageSize);

	/**
	 * 获取更新固件下终端列表
	 * @param hardVersion 固件版本号
	 * @param deviceStatus 在线状态 0.在线; 1.离线
	 * @param deviceModel 机型
	 * @param groupCode 分组编码
	 * @param province 省
	 * @param city 市
	 * @param area 区
	 * @param deviceUpgradeId 固件ID
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	PageInfo<DeviceInfoListVO> updateFirmWareListByPage(String hardVersion, String deviceStatus, String deviceModel, String groupCode,
	                                                    String province, String city, String area, String deviceUpgradeId,
	                                                    Integer pageNum, Integer pageSize);

	/**
	 * 查询所有固件版本号
	 * @return
	 */
	List<String> listAllFirmWareVersionCode();

	/**
	 * 根据查询条件获取在线终端总数
	 * @param hardVersion 固件版本号
	 * @param deviceModel 机型
	 * @param groupCode 分组编码
	 * @param province 省
	 * @param city 市
	 * @param area 区
	 * @return
	 */
    Long getFirmWareDeviceOnlineCount(String hardVersion, String deviceModel, String groupCode, String province, String city, String area);

	/**
	 * 根据查询条件获取离线终端总数
	 * @param hardVersion 固件版本号
	 * @param deviceModel 机型
	 * @param groupCode 分组编码
	 * @param province 省
	 * @param city 市
	 * @param area 区
	 * @return
	 */
	Long getFirmWareDeviceOfflineCount(String hardVersion, String deviceModel, String groupCode, String province, String city, String area);
	/**
	 * 根据终端Id修改固件升级Id
	 * @param deviceInfoIds 终端Id(多个Id之间用逗号隔开)
	 * @param deviceUpgradeId 固件Id
	 * @param user
     * @param request
     * @return 更新成功条数
	 */
    int updateFirmWareUpgradeIdByDeviceInfoIds(String deviceInfoIds, Integer deviceUpgradeId, JSONObject user, HttpServletRequest request);

    /**
     * 根据固件Id查询固件名称和版本号
     * @param deviceUpgradeId
     * @return
     */
    FirmWareListVO getFirmWareByDeviceUpgradeId(String deviceUpgradeId);

	/**
	 * 新增固件
	 * @param deviceUpgrade
	 */
    int saveFirmware(TbDeviceUpgrade deviceUpgrade);

	/**
	 * 判断是否可新增
	 * @param deviceUpgrade 待检测的固件
	 * @return
	 */
	boolean canSave(TbDeviceUpgrade deviceUpgrade);

	/**
	 * 检查终端是否重复升级
	 * @param deviceInfoIds
	 * @param deviceUpgradeId
	 * @return 重复升级的终端Id，多个终端之间用逗号隔开
	 */
    HashMap checkRepeat(String deviceInfoIds, Long deviceUpgradeId);

	/**
	 * 统计固件
	 * @param deviceUpgrade 待检测的固件
	 * @return
	 */
	int countByParams(TbDeviceUpgrade deviceUpgrade);

	/**
	 * 升级固件信息
	 * @param deviceUpgrade 升级的固件
	 * @return
	 */
	int promoteFirmWare(TbDeviceUpgrade deviceUpgrade);
}
